#pragma once

class IShell;
extern IShell* g_Shell;

class IShell
{
public:
	IShell();
	virtual ~IShell();

	virtual void	AddLuaFunction(const std::string& name, void (*ptn)(const std::string&, int, int, const std::string&)) = 0;
	virtual void	AddLuaFunction(const std::string& name, void (*ptn)(const std::string&, const std::string&)) = 0;
	virtual void	AddLuaFunction(const std::string& name, void (*ptn)(const std::string&)) = 0;
	virtual void	AddLuaFunction(const std::string& name, void (*ptn)()) = 0;
	virtual void	AddLuaFunction(const std::string& name, void (*ptn)(float, float, float, float, char, float)) = 0;

	virtual void	Command(const std::string& cmd) = 0;
	virtual void	File(const std::string& path) = 0;
	virtual void	FileNow(const std::string& path) = 0;

	virtual void	CallFunction(const std::string& name) = 0;

	static void		CreateInstance();
	static void		DestroyInstance();
};

